/*
 * @(#)CallExecutor.java $version 2010. 8. 11
 *
 * Copyright 2007-2010 NHN Corp. All rights Reserved. 
 * NHN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */

package com.nhncorp.usf.core.call;

import com.nhncorp.usf.core.exception.CallExecutorException;
import com.nhncorp.usf.core.service.ServiceRegistry;

/**
 * 주어진 {@link Call} 객체가 지정한 대로 객체를 찾아 호출을 수핸한다.
 * 
 * @author Web Platform Development Team
 */
public interface CallExecutor {
	/**
	 * 주어진 {@link Call} 객체가 지정한 대로 객체를 찾아 호출을 수행하고 그 결과를 리턴한다.
	 * 
	 * @param serviceRegistry
	 *            실행하고자 하는 호출 대상을 제공하는 레지스트리
	 * @param call
	 *            실행하고자 하는 호출
	 * @return 호출 실행 결과 얻은 결과 값 ({@link ReturnValue} 또는 {@link Fault})
	 * @throws CallExecutorException
	 *             지정한 이름의 객체나 적합한 메소드를 찾지 못했을 때
	 */
	Reply execute(ServiceRegistry serviceRegistry, Call call) throws CallExecutorException;
}
